package com.avic.modules.equipment.domain;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.avic.domain.BaseDomain;
import com.avic.modules.equipment.domain.vo.Category;
import com.avic.modules.equipment.domain.vo.PositionVo;
import com.avic.modules.mapping.domain.DataMapping;
import com.avic.modules.record.domain.SeeYouTomorrow;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.sql.Timestamp;
import java.util.List;
import java.util.Map;

/**
 * @author zhangzikang 设备表
 * @date 2022-08-14
 */
@Data
@TableName("equipment")
@NoArgsConstructor
public class Equipment extends BaseDomain {

    // 设备id
    private String id;

    // 设备编号
    @NotBlank(message = "请填写设备编号")
    private String equipNumber;

    // 设备类别
    private Long equipCategoryId;

    // 图片
    private String picture;

    // 资产编码
    @NotBlank(message = "请填写资产编码")
    private String assetCode;

    // 子设备
    private String equipSon;

    // 子设备名称
    @NotBlank(message = "请填写设备名称")
    private String equipSonName;

    // 主设备,辅助设备,配套设备
    private Integer deviceType;

    // 设备名称
    private String equipName;

    // 子设备
    @TableField(exist = false)
    List<Equipment> equipmentAll;

    // 站位
    @TableField(exist = false)
    List<Station> stationAll;

    // 左机翼
    @TableField(exist = false)
    private List<PositionVo> left;
    @TableField(exist = false)
    private List<PositionVo> leftLower;

    // 中机身
    @TableField(exist = false)
    private List<PositionVo> in;

    // 右机翼
    @TableField(exist = false)
    private List<PositionVo> right;
    @TableField(exist = false)
    private List<PositionVo> rightLower;

    // 当前运行秒数
    @TableField(exist = false)
    private Long duration;

    // 设备报警代码
    @TableField(exist = false)
    private String equipAlarm;

    @TableField(exist = false)
    private Integer cardType;

    /** 设备点位 */
    @TableField(exist = false)
    private List<DataMapping> dataMapping;

    /** 详情 */
    @TableField(exist = false)
    private Category category;

    private Integer sort;

    // 设备昨日记录
    @TableField(exist = false)
    private SeeYouTomorrow seeYouTomorrow;

    @TableField(exist = false)
    private List<Map<String, Object>> equipmentOperation;

    // 资产状态
    private Integer assetStatus;

    // 状态说明
    private String statusDesc;

    // 所属车间
    private String workShop;

    // 设备位置
    private String equipPos;

    // 维护班组
    private String maintainGroup;

    // 维护人
    private Long maintainPersonId;

    // 健康状态
    private Integer healthStatus;

    // 维护策略
    private String strategy;

    // 运行状态
    private Integer runningState;

    // 故障预测
    private String forecast;

    // 生产厂家
    private String manufacturer;

    // 供应商
    private String supplierName;

    // 规格
    private String specNumber;

    // 启用时间
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
    private Timestamp enableTime;

    // 购买时间
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
    private Timestamp purchaseTime;

    // 站位
    @NotBlank(message = "请填写站位")
    private String stackNumber;

    // 站台下的AGV
    private String stackAgvNumber;

    // 站台下的栈桥编号
    private String stackBridgeNumber;

    // 责任人
    private Long principalId;

    // 创建人
    private Long createUserId;

    // 修改人
    private Long updateUserId;

    // 是否读取西工大算法
    private Integer whetherToRead;

    // 联系方式
    @NotBlank(message = "请填写联系方式")
    private String contactInfo;

    // 备注
    @Size(min = 0, max = 200, message = "备注长度不能大于255")
    private String remark;

    // 排序
    public void sum(Long equipCategoryId) {
        if(equipCategoryId==1){
            setSort(1);
        } else if(equipCategoryId==2) {
            setSort(2);
        }else if(equipCategoryId==3) {
            setSort(3);
        }else if(equipCategoryId==4) {
            setSort(5);
        }else if(equipCategoryId==5) {
            setSort(4);
        }else if(equipCategoryId==6) {
            setSort(7);
        }else if(equipCategoryId==7) {
            setSort(6);
        }
    }

    public void copy(Equipment source) {
        BeanUtil.copyProperties(source, this, CopyOptions.create().setIgnoreNullValue(true));
    }

}
